package com.tio.showcaseserver.server;

import com.tio.showcaseserver.common.Constant;
import com.tio.showcaseserver.server.handler.ShowcaseServerAioHandler;
import com.tio.showcaseserver.server.listener.ShowcaseServerAioListener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.tio.server.ServerGroupContext;
import org.tio.server.TioServer;
import org.tio.server.intf.ServerAioHandler;
import org.tio.server.intf.ServerAioListener;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.io.IOException;

/**
 *
 * @author tanyaowu
 * 2017年3月27日 上午12:16:31
 */
@Component
@Slf4j
public class ShowcaseServerStarter {
	/**
	 * handler, 包括编码、解码、消息处理
	 */
	static ServerAioHandler aioHandler = new ShowcaseServerAioHandler();
	/**
	 * 事件监听器，可以为null，但建议自己实现该接口，可以参考showcase了解些接口
	 */
	static ServerAioListener aioListener = new ShowcaseServerAioListener();
	/**
	 * 一组连接共用的上下文对象
	 */
	static ServerGroupContext serverGroupContext = new ServerGroupContext(aioHandler, aioListener);
	/**
	 * tioServer对象
	 */
	static TioServer tioServer = new TioServer(serverGroupContext); //可以为空

	/**
	 * 有时候需要绑定ip，不需要则null
	 */
	@Value("${tio.server.host}")
	public static String serverIp;

	/**
	 * 监听的端口
	 */
	@Value("${tio.server.port}")
	private Integer serverPort;

	/**
	 * 启动Server
	 *
	 * @throws InterruptedException
	 */
	@PostConstruct
	public void start() throws IOException {
		tioServer.start(serverIp, serverPort);
	}

	@PreDestroy
	public void destory() {
	}
}